package com.lkx.lkxeventbus;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.lkx.lkxeventbus.lib.LkxEventBus;
import com.lkx.lkxeventbus.lib.LkxSubscribe;
import com.lkx.lkxeventbus.lib.ThreadMode;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LkxEventBus.getInstance().register(this);
    }

    public void post(View view) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                LkxEventBus.getInstance().post(new User("无敌",100));
            }
        }).start();
    }

    /**
     * EventBus的性能问题：发送事件的时候是根据方法的参数类型来确定调用的。
     * 通过refresh1(User user) refresh2(User user)分析
     * 当我执行 LkxEventBus.getInstance().post(new User("无敌",100));时，
     * 两个刷新的方法都会接受到，但是我只需要在refresh1(User user)做更新操作。
     * 如果多个很多方法的参数都是User类，那么所有的方法都会被执行到。
     *
     */

    @LkxSubscribe(threadMode = ThreadMode.MAIN)
    public void refresh1(User user){
        Toast.makeText(this,"refresh1:"+user.toString(),Toast.LENGTH_LONG).show();
    }

    @LkxSubscribe(threadMode = ThreadMode.MAIN)
    public void refresh2(User user){
        Toast.makeText(this,"refresh2:"+user.toString(),Toast.LENGTH_LONG).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        LkxEventBus.getInstance().unRegister(this);
    }
}